home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
tex
/
texsrc.arc
/
TEX5.C
< prev
next >
Wrap
C/C++ Source or Header
|
1988-09-14
|
64KB
|
2,090 lines
overlay "tex5"
#define EXTERN extern
#include "texd.h"
zappendtovlis ( b )
halfword b ;
{r_appendtovlis
scaled d ;
halfword p ;
if ( curlist .auxfield > - 65536000 )
{
d = mem [(long) eqtb [ 3527 ] .hh .v.RH + 1 ] .cint - curlist .auxfield - mem [(long)
b + 3 ] .cint ;
if ( d < eqtb [ 5703 ] .cint )
p = newparamglue ( 0 ) ;
else {
p = newskipparam ( 1 ) ;
mem [(long) tempptr + 1 ] .cint = d ;
}
mem [(long) curlist .tailfield ] .hh .v.RH = p ;
curlist .tailfield = p ;
}
mem [(long) curlist .tailfield ] .hh .v.RH = b ;
curlist .tailfield = b ;
curlist .auxfield = mem [(long) b + 2 ] .cint ;
}
halfword newnoad () { register halfword Result; r_newnoad
long p ;
p = getnode ( 4 ) ;
mem [ p ] .hh.b0 = 16 ;
mem [ p ] .hh.b1 = 0 ;
mem [ p + 1 ] .hh = emptyfield ;
mem [ p + 3 ] .hh = emptyfield ;
mem [ p + 2 ] .hh = emptyfield ;
Result = p ;
return(Result) ;
}
halfword znewstyle ( s )
smallnumber s ;
{register halfword Result; r_newstyle
long p ;
p = getnode ( 3 ) ;
mem [ p ] .hh.b0 = 14 ;
mem [ p ] .hh.b1 = s ;
mem [ p + 1 ] .cint = 0 ;
mem [ p + 2 ] .cint = 0 ;
Result = p ;
return(Result) ;
}
halfword newchoice () { register halfword Result; r_newchoice
long p ;
p = getnode ( 3 ) ;
mem [ p ] .hh.b0 = 15 ;
mem [ p ] .hh.b1 = 0 ;
mem [ p + 1 ] .hh .v.LH = 0 ;
mem [ p + 1 ] .hh .v.RH = 0 ;
mem [ p + 2 ] .hh .v.LH = 0 ;
mem [ p + 2 ] .hh .v.RH = 0 ;
Result = p ;
return(Result) ;
}
showinfo () { r_showinfo
shownodelist ( mem [(long) tempptr ] .hh .v.LH ) ;
}
halfword zfractionrule ( t )
scaled t ;
{register halfword Result; r_fractionrule
halfword p ;
p = newrule () ;
mem [(long) p + 3 ] .cint = t ;
mem [(long) p + 2 ] .cint = 0 ;
Result = p ;
return(Result) ;
}
halfword zoverbar ( b , k , t )
halfword b ;
scaled k , t ;
{register halfword Result; r_overbar
halfword p, q ;
p = newkern ( k ) ;
mem [(long) p ] .hh .v.RH = b ;
q = fractionrule ( t ) ;
mem [(long) q ] .hh .v.RH = p ;
p = newkern ( t ) ;
mem [(long) p ] .hh .v.RH = q ;
Result = vpackage ( p , 0 , 1 , 1073741823 ) ;
return(Result) ;
}
halfword zcharbox ( f , c )
internalfont f ;
quarterword c ;
{register halfword Result; r_charbox
fourquarters q ;
eightbits hd ;
halfword b, p ;
q = fontinfo [ charbase [ f ] + c ] .qqqq ;
hd = q .b1 ;
b = newnullbox () ;
mem [(long) b + 1 ] .cint = fontinfo [ widthbase [ f ] + q .b0 ] .cint + fontinfo
[ italicbase [ f ] + ( q .b2 ) / 4 ] .cint ;
mem [(long) b + 3 ] .cint = fontinfo [ heightbase [ f ] + ( hd ) / 16 ] .cint ;
mem [(long) b + 2 ] .cint = fontinfo [ depthbase [ f ] + ( hd ) % 16 ] .cint ;
p = getavail () ;
mem [(long) p ] .hh.b1 = c ;
mem [(long) p ] .hh.b0 = f ;
mem [(long) b + 5 ] .hh .v.RH = p ;
Result = b ;
return(Result) ;
}
zstackintobox ( b , f , c )
halfword b ;
internalfont f ;
quarterword c ;
{r_stackintobox
halfword p ;
p = charbox ( f , c ) ;
mem [(long) p ] .hh .v.RH = mem [(long) b + 5 ] .hh .v.RH ;
mem [(long) b + 5 ] .hh .v.RH = p ;
mem [(long) b + 3 ] .cint = mem [(long) p + 3 ] .cint ;
}
scaled zheightplusde ( f , c )
internalfont f ;
quarterword c ;
{register scaled Result; r_heightplusde
fourquarters q ;
eightbits hd ;
q = fontinfo [ charbase [ f ] + c ] .qqqq ;
hd = q .b1 ;
Result = fontinfo [ heightbase [ f ] + ( hd ) / 16 ] .cint + fontinfo [
depthbase [ f ] + ( hd ) % 16 ] .cint ;
return(Result) ;
}
halfword zvardelimiter ( d , s , v )
halfword d ;
smallnumber s ;
scaled v ;
{/* 40 22 */ register halfword Result; r_vardelimiter
halfword b ;
internalfont f, g ;
quarterword c, x, y ;
integer m, n ;
scaled u ;
scaled w ;
fourquarters q ;
eightbits hd ;
fourquarters r ;
smallnumber z ;
boolean largeattempt ;
f = 0 ;
w = 0 ;
largeattempt = false ;
z = mem [(long) d ] .qqqq .b0 ;
x = mem [(long) d ] .qqqq .b1 ;
while ( true ) {
if ( ( z != 0 ) || ( x != 0 ) )
{
z = z + s + 16 ;
do { z = z - 16 ;
g = eqtb [ 4579 + z ] .hh .v.RH ;
if ( g != 0 )
{
y = x ;
lab22: if ( ( y >= fontbc [ g ] ) && ( y <= fontec [ g ] ) )
{
q = fontinfo [ charbase [ g ] + y ] .qqqq ;
if ( ( q .b0 > 0 ) )
{
if ( ( ( q .b2 ) % 4 ) == 3 )
{
f = g ;
c = y ;
goto lab40 ;
}
hd = q .b1 ;
u = fontinfo [ heightbase [ g ] + ( hd ) / 16 ] .cint + fontinfo
[ depthbase [ g ] + ( hd ) % 16 ] .cint ;
if ( u > w )
{
f = g ;
c = y ;
w = u ;
if ( u >= v )
goto lab40 ;
}
if ( ( ( q .b2 ) % 4 ) == 2 )
{
y = q .b3 ;
goto lab22 ;
}
}
}
}
} while ( ! ( z < 16 ) ) ;
}
if ( largeattempt )
goto lab40 ;
largeattempt = true ;
z = mem [(long) d ] .qqqq .b2 ;
x = mem [(long) d ] .qqqq .b3 ;
}
lab40: if ( f != 0 )
if ( ( ( q .b2 ) % 4 ) == 3 )
{
b = newnullbox () ;
mem [(long) b ] .hh.b0 = 1 ;
r = fontinfo [ extenbase [ f ] + q .b3 ] .qqqq ;
c = r .b3 ;
u = heightplusde ( f , c ) ;
w = 0 ;
q = fontinfo [ charbase [ f ] + c ] .qqqq ;
mem [(long) b + 1 ] .cint = fontinfo [ widthbase [ f ] + q .b0 ] .cint +
fontinfo [ italicbase [ f ] + ( q .b2 ) / 4 ] .cint ;
c = r .b2 ;
if ( c != 0 )
w = w + heightplusde ( f , c ) ;
c = r .b1 ;
if ( c != 0 )
w = w + heightplusde ( f , c ) ;
c = r .b0 ;
if ( c != 0 )
w = w + heightplusde ( f , c ) ;
n = 0 ;
if ( u > 0 )
while ( w < v ) {
w = w + u ;
incr ( n ) ;
if ( r .b1 != 0 )
w = w + u ;
}
c = r .b2 ;
if ( c != 0 )
stackintobox ( b , f , c ) ;
c = r .b3 ;
for ( m = 1 ; m <= n ; m ++ )
stackintobox ( b , f , c ) ;
c = r .b1 ;
if ( c != 0 )
{
stackintobox ( b , f , c ) ;
c = r .b3 ;
for ( m = 1 ; m <= n ; m ++ )
stackintobox ( b , f , c ) ;
}
c = r .b0 ;
if ( c != 0 )
stackintobox ( b , f , c ) ;
mem [(long) b + 2 ] .cint = w - mem [(long) b + 3 ] .cint ;
}
else b = charbox ( f , c ) ;
else {
b = newnullbox () ;
mem [(long) b + 1 ] .cint = eqtb [ 5712 ] .cint ;
}
mem [(long) b + 4 ] .cint = half ( mem [(long) b + 3 ] .cint - mem [(long) b + 2 ] .cint ) -
fontinfo [ 22 + parambase [ eqtb [ 4581 + s ] .hh .v.RH ] ] .cint ;
Result = b ;
return(Result) ;
}
halfword zrebox ( b , w )
halfword b ;
scaled w ;
{register halfword Result; r_rebox
halfword p ;
internalfont f ;
scaled v ;
fourquarters qi;
if ( ( mem [(long) b + 1 ] .cint != w ) && ( mem [(long) b + 5 ] .hh .v.RH != 0 ) )
{
if ( mem [(long) b ] .hh.b0 == 1 )
b = hpack ( b , 0 , 1 ) ;
p = mem [(long) b + 5 ] .hh .v.RH ;
if ( ( ( p >= himemmin ) ) && ( mem [(long) p ] .hh .v.RH == 0 ) )
{
f = mem [(long) p ] .hh.b0 ;
/* v = fontinfo [ widthbase [ f ] + fontinfo [ charbase [ f ] + mem [(long) p ]
.hh.b1 ] .qqqq .b0 ] .cint ; */
qi = fontinfo [ charbase [ f ] + mem [(long) p ] .hh.b1 ] .qqqq;
v = fontinfo [ widthbase [ f ] +qi.b0 ] .cint ;
if ( v != mem [(long) b + 1 ] .cint )
mem [(long) p ] .hh .v.RH = newkern ( mem [(long) b + 1 ] .cint - v ) ;
}
freenode ( b , 7 ) ;
b = newglue ( 12 ) ;
mem [(long) b ] .hh .v.RH = p ;
while ( mem [(long) p ] .hh .v.RH != 0 ) p = mem [(long) p ] .hh .v.RH ;
mem [(long) p ] .hh .v.RH = newglue ( 12 ) ;
Result = hpack ( b , w , 0 ) ;
}
else {
mem [(long) b + 1 ] .cint = w ;
Result = b ;
}
return(Result) ;
}
halfword zmathglue ( g , m )
halfword